package com.heima.service.impl;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.mapper.AdUserMapper;
import com.heima.model.admin.pojos.AdUser;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.enums.AppHttpCodeEnum;
import com.heima.service.AdUserService;
import com.heima.utils.common.HutoolJWT;
import org.springframework.stereotype.Service;

import java.util.HashMap;

/**
 * @author chenshan
 * @description 针对表【ap_user(APP用户信息表)】的数据库操作Service实现
 * @createDate 2022-10-14 09:50:37
 */
@Service
public class AdUserServiceImpl extends ServiceImpl<AdUserMapper, AdUser>
        implements AdUserService {

    /**
     * 管理端用户登录接口
     * {"name":"guest","password":"guest"}
     */
    @Override
    public ResponseResult login(AdUser user) {
        // 校验数据的合法性  用户名 密码
        if (!ObjectUtil.isAllNotEmpty(user.getName(), user.getPassword())) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "用户名或密码不能为空~");
        }

        // 判断用户名和密码是否合法
        if (StrUtil.isNotBlank(user.getName())) {
            AdUser adUser = getOne(Wrappers.lambdaQuery(AdUser.class).eq(AdUser::getName, user.getName()));
            if (ObjectUtil.isNotNull(adUser)) {
                // 正常的登录逻辑
                // 拿到用户输入的密码 和 盐做MD5
                String pass = SecureUtil.md5(user.getPassword() + adUser.getSalt());
                // 和数据库中的密码做对比
                if (!StrUtil.equals(pass, adUser.getPassword())) {
                    return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
                }
                // 判断账号是否被禁用
                if (adUser.getStatus() != 9) {
                    return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_STATUS_ERROR);
                }
                // 生成Token 并 返回
                HashMap<String, Object> mm = new HashMap<>();
                mm.put("id", adUser.getId());
                String token = HutoolJWT.createToken(mm);
                HashMap<String, Object> hashMap = new HashMap<>();
                hashMap.put("token", token);
                hashMap.put("user", adUser);
                return ResponseResult.okResult(hashMap);
            }
        }


        return null;
    }
}




